package com.aps.server.mapper;

import com.aps.server.entity.ApsConstraint;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * APS约束规则 Mapper 接口
 * 继承 MyBatis Plus 的 BaseMapper，提供基础的 CRUD 操作
 */
@Mapper
public interface ApsConstraintMapper extends BaseMapper<ApsConstraint> {

    /**
     * 根据租户ID查询约束规则列表
     *
     * @param tenantId 租户ID
     * @return 约束规则列表
     */
    @Select("SELECT * FROM aps_constraint WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<ApsConstraint> selectByTenantId(@Param("tenantId") String tenantId);

    /**
     * 根据租户ID分页查询约束规则列表
     *
     * @param page 分页对象
     * @param tenantId 租户ID
     * @return 分页约束规则列表
     */
    @Select("SELECT * FROM aps_constraint WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    IPage<ApsConstraint> selectPageByTenantId(Page<ApsConstraint> page, @Param("tenantId") String tenantId);

    /**
     * 根据约束名称查询约束规则
     *
     * @param constraintName 约束名称
     * @param tenantId 租户ID
     * @return 约束规则信息
     */
    @Select("SELECT * FROM aps_constraint WHERE constraint_name = #{constraintName} AND tenant_id = #{tenantId}")
    ApsConstraint selectByConstraintName(@Param("constraintName") String constraintName, @Param("tenantId") String tenantId);

    /**
     * 根据租户ID统计约束规则数量
     *
     * @param tenantId 租户ID
     * @return 约束规则数量
     */
    @Select("SELECT COUNT(*) FROM aps_constraint WHERE tenant_id = #{tenantId}")
    Long countByTenantId(@Param("tenantId") String tenantId);
}
